package vue;

import java.util.ArrayList;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

import controle.TankJoueurControler;
import modele.Alien;
import modele.Missile;
import modele.TankJoueur;
import modele.World;

public class WorldRendererGraphique extends WorldRenderer {

	private BitmapFont score;

	private SpriteBatch spriteBatch;
	private int ppuX;
	private int ppuY;
	private OrthographicCamera camera;
	private float widthScreen = Gdx.graphics.getWidth();
	private float heightScreen = Gdx.graphics.getHeight();

	private boolean debug;
	private ShapeRenderer shapeRenderer;
	
	private TankJoueurControler tankJoueurControleur;
	
	public WorldRendererGraphique(World w, boolean d) {
		super(w);
		shapeRenderer = new ShapeRenderer();
		debug = d;

		score = new BitmapFont();
		score.setColor(Color.WHITE);

		ppuY = (int) (heightScreen/720); //720
		ppuX = (int) (widthScreen/600); //600
		spriteBatch = new SpriteBatch();
		
		tankJoueurControleur = world.getTank().getTankJoueurControler();
		
		Gdx.input.setInputProcessor(tankJoueurControleur);
	}

	public void render(float delta) 
	{
		tankJoueurControleur.keyPressed();

		Gdx.gl.glClearColor(0, 0, 0, 0);
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
		
		
		
		spriteBatch.begin();
		
		afficherAlien();
		afficherMissile();
		afficherTank();
		afficherScore();

		deplacerMissile();
		
		spriteBatch.end();

		if(debug) //affichage des hitbox des gemmes et des boules de feu
			afficherHitbox();
	}
	
	public void deplacerMissile()
	{
		ArrayList<Missile> liste_cloneMissile = (ArrayList<Missile>)world.getListe_missile().clone();
		
		for(Missile missile : liste_cloneMissile)
		{
			missile.getControler().deplacer(Missile.VITESSE.x,Missile.VITESSE.y);
		}
	}
	
	private void afficherMissile()
	{
		for(Missile missile : world.getListe_missile())
		{
			
			
			spriteBatch.draw(missile.getTexture(),missile.getPosition().x, missile.getPosition().y, missile.getWidth() * ppuX, missile.getHeight() * ppuY);
		}
	}
	
	private void afficherAlien()
	{
		for(Alien alien : world.getListe_alien())
		{
			spriteBatch.draw(alien.getTexture(),alien.getPosition().x, alien.getPosition().y, alien.getWidth() * ppuX, alien.getHeight() * ppuY);
		}
	}
	
	private void afficherTank()
	{
		spriteBatch.draw(world.getTank().getTexture(), world.getTank().getPosition().x, world.getTank().getPosition().y, world.getTank().getWidth() * ppuX, world.getTank().getHeight() * ppuY);
	}
	
	private void afficherScore()
	{
		score.draw(spriteBatch, "score = "+world.getScore().getScore(), (float)(widthScreen - widthScreen * 0.15) , (float)(heightScreen - heightScreen * 0.05));
	}
	
	private void afficherHitbox()
	{
		shapeRenderer.begin(ShapeType.Line);// juste le trait des bords 

		shapeRenderer.setColor(Color.GREEN);// coleur du trait
		for(Alien alien : world.getListe_alien())
		{
			shapeRenderer.circle(alien.getHitBox().x, alien.getHitBox().y, alien.getHitBox().radius); 
		}

		shapeRenderer.setColor(Color.BLUE);
		for(Missile missile : world.getListe_missile())
		{
			shapeRenderer.rect(missile.getHitBox().x, missile.getHitBox().y, missile.getHitBox().getWidth(), missile.getHitBox().getHeight());
		}
		
		shapeRenderer.setColor(Color.YELLOW);
		shapeRenderer.rect(world.getTank().getHitBox().x,world.getTank().getHitBox().y,world.getTank().getHitBox().getWidth(),world.getTank().getHitBox().getHeight());

		shapeRenderer.end();
	}

}
